package org.huawei.aop;

import com.google.common.util.concurrent.RateLimiter;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class RateLimiterAspect {

    // 定义每秒允许 5 个请求的限流器
    private final RateLimiter rateLimiter = RateLimiter.create(5.0);

    // 定义一个 Pointcut，匹配所有标记了 @RateLimit 注解的方法
    @Pointcut("@annotation(org.huawei.annotations.RateLimit)")
    public void rateLimitedMethod() {}

    // 在执行标记了 @RateLimit 注解的方法之前，检查限流
    @Before("rateLimitedMethod()")
    public void limitRate() {
        if (!rateLimiter.tryAcquire()) {
            throw new RuntimeException("Too many requests. Please try again later.");
        }
    }
}
